#include<stdio.h>
#include <math.h> 
//打印一个*号等腰三角形
void work1(void)
{
    int i,j,n;//n：输入三角形行数   i:行  j:列
    printf("请输入行数：");
    scanf("%d",&n);
    for ( i = 1; i <=n; i++)
    {
       //1.空格  n-i个  
       for(j=1;j<=n-i;j++)
       {
        printf("-");
       }

       //2.星号 2*i-1个
       for(j=1;j<=2*i-1;j++)
       {
        printf("*");
       }

       //3.换行
       printf("\n");
    }
    
}
void work2_1(void)
{
    unsigned int num;//保存输入整数
    int i;
    printf("请输入一个自然数：");
    scanf("%u",&num);
    if (num==1)
    {
       printf("概述既不是质数也不是合数，这个数为1\n");
       return;//结束函数
    }
    else if (num==2)
    {
        printf("该数为质数\n");
        return;
    }
    for ( i = 2; i <num; i++)
    {
        if(num%i==0)//被其它数整除 说明不是质数
        {
            break;
        }
    }
    if (i==num)
    {
        printf("%u该数为质数\n",num);
    }
    else 
    {
       printf("%u该数为合数\n",num);
    }

}

void work2_2(void)
{
     unsigned int num;//保存输入整数
    int i,flag=1;//1:质数
    printf("请输入一个自然数：");
    scanf("%u",&num);
    if (num==1)
    {
       printf("概述既不是质数也不是合数，这个数为1\n");
       return;//结束函数
    }
    else if (num==2)
    {
        printf("该数为质数\n");
        return;
    }
    for ( i = 2; i <sqrt(num); i++)
    {
        if(num%i==0)//被其它数整除 说明不是质数
        {
            flag=0;
            break;
        }
    }
    if (flag)
    {
        printf("%u该数为质数\n",num);
    }
    else 
    {
       printf("%u该数为合数\n",num);
    }
}
void work3(void)
{
    int i,j;//双重循环
    printf("1-50之间的质数有：");
    for ( i = 1; i <=50; i++)
    {
       if(i==1)
       {
           continue;
       }
       if (i==2)
       {
        printf("%d\t",i);
         continue;
       }
       for (j = 2; j < i; j++)//
       {
            if(i%j==0)
            {
                break;
            }
       }
       if (j==i)
       {
        printf("%d\t",i);
       }
       
    }
     printf("\n");
    
}
//是否是质数  是返回1  否返回0
int isprime(int num)
{
    
    int i;
    if (num==2)
    {
       
        return 1;
    }
    for ( i = 2; i <num; i++)
    {
        if(num%i==0)//被其它数整除 说明不是质数
        {
            break;
        }
    }
    if (i==num)
    {
        return 1;
    }
   return 0;
}
void work4(void)
{
    int i,j;
    for ( i = 2; i < 51; i++)
    {
        if (isprime(i))//判断i这个数是不是质数
        {
            continue;//终止本次循环  继续执行下一次循环
        }
        printf("\n合数%d的因数有：",i);
        for (j = 1; j <=i; j++)
        {
           if(i%j==0)//如果i能被j整除，说明j是i的因数
           {
            printf("%d\t",j);
           } 
        }
        
    }
    printf("\n");
}
int main(int argc, char const *argv[])
{
  //  work1();
 //   work2_1();
  //  work2_2();
 // work3();
 work4();
    return 0;
}
